const puppeteer = require('puppeteer-core');

const sleep = (time) =>
  new Promise((resolve) => {
    setTimeout(resolve, time)
  })
 
const login = async ({ username, pwd }) => {
  // 使用puppeteer的launch（）方法获得一个操控浏览器的实例browser
  const browser = await puppeteer.launch({
    executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
    slowMo: 100, //放慢速度
    headless: false, //无头浏览器：关闭
    defaultViewport: { width: 1920, height: 1000 }, //设置网页的尺寸
    ignoreHTTPSErrors: true, //忽略 https 报错,
    timeout: 100000
  })
  
  // 使用browser实例在内存中新建一个网页page
  const page = await browser.newPage()
  
  // 使用网页page的goto（）方法进入指定的页面
  await page.goto('https://gitee.com/login?redirect_to_url=%2F', {timeout: 100000})

  console.log('打开页面')
 
  // 延迟1秒再操作
  sleep(1000)
 
  // 获取账号的DOM，对其进行操作，输入账号
  const inputUsername = await page.$('#user_login')
  inputUsername.focus()
  for (let i = 0; i < username.length; i++) {
    await inputUsername.type(username[i])
  }
 console.log('输入账号...')
  // 获取密码的DOM，对其进行操作，输入密码
  const inputPwd = await page.$('#user_password')
  inputPwd.focus()
  for (let i = 0; i < pwd.length; i++) {
    await inputPwd.type(pwd[i])
  }
  console.log('输入密码...')
  // 获取提交按钮的DOM
  const btnConfirm = await page.$('.fluid')

  console.log('执行登录...')
  
  // 等待页面跳转完成，一般点击某个按钮需要跳转时，都需要等待 page.waitForNavigation() 执行完毕才表示跳转成功
  await Promise.all([btnConfirm.click(), page.waitForNavigation()])

  await sleep(2000)

  const cookie = await page.cookies()
 
  console.log(cookie)

  await browser.close()
}

login({ username: 'zongjun.li@outlook.com', pwd: 'joey300939' })
 
